//
//  WBUserAccount.swift
//  传智微博
//
//  Created by zuxi li on 2017/3/21.
//  Copyright © 2017年 lingtu. All rights reserved.
//

import UIKit


private let accountFile: NSString = "useraccount.json"

/// 账户信息
class WBUserAccount: NSObject {

    /// 访问令牌
    var access_token: String? //= "2.006qtdcFu7veVE167dd1b17cJ91rYC"
    
    /// 用户代号
    var uid: String?
    
    /// access_token的生命周期 过期日期 单位秒 开发者5年  使用者3天
    var expires_in : TimeInterval = 0 {
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    /// 过期日期
    var expiresDate: Date?
    
    
    /// 用户昵称
    var screen_name: String?
    
    /// 用户头像地址
    var avatar_large: String?
    
    override var description: String {
        return yy_modelDescription()
    }
    
    override init() {
        super.init()
        // 从磁盘加载 保存的文件 -》 字典
        // 加载磁盘文件到二进制数，如果失败直接返回
         guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
            let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: AnyObject]  else {
                return
        }
        // 使用字典设置属性
        // 用户是否登录的关键代码
        yy_modelSet(with: dict ?? [:])
        
        print(self)
        
        // 测试过期日期， 开发中每一个分支都需要测试
//        expiresDate = Date(timeIntervalSinceNow: -20)
        // 判断token是否过期
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("账户过期")
            // 清空token
            access_token = nil
            uid = nil
            // 删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
        print("账户正常 \(self)")
    }
    
    /**
     1. 偏好设置（小的）
     2. 沙盒(归档、plist、json)
     3. 数据库（FMDB/CoreData）
     4. 钥匙串访问（小的， 自动加密， 需要使用框架  SSKeyChain）
 */
    func saveAccount(){
        //1. 模型转字典
        var dict = (self.yy_modelToJSONObject() as? [String: AnyObject]) ?? [:]
        // 需要删除expires_in
        _ =  dict.removeValue(forKey: "expires_in")
        // 2. 字典序列化 Data
//        let data = try? JSONSerialization.data(withJSONObject: dict, options: [])
        // 3. 写入磁盘
//        let filePath = ("useraccount.json" as NSString).cz_appendDocumentDir()
        
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
            let filePath = accountFile.cz_appendDocumentDir() else {
                return
        }
        
//        data.write(to: <#T##URL#>)
        (data as NSData).write(toFile: filePath, atomically: true)
        print("用户账户保存成功 \(filePath)")
    }
}
